package com.example.demo.controller;

import com.example.demo.dto.ApiResponse;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 用户管理控制器
 * 处理用户相关的HTTP请求，包括注册、登录、查询、更新和删除用户等操作
 */
@RestController
@RequestMapping("/users")
public class UserController {
    
    // 注入用户服务
    @Autowired
    private UserService userService;
    
    /**
     * 用户注册
     * 
     * @param user 用户注册信息
     * @return 注册成功的用户信息
     */
    @PostMapping("/register")
    public ResponseEntity<ApiResponse<User>> register(@RequestBody User user) {
        System.out.println(user.getUsername()+user.getPassword());
        User registeredUser = userService.register(user);
        return ResponseEntity.ok(ApiResponse.success("用户注册成功", registeredUser));
    }
    
    /**
     * 用户登录
     * 
     * @param username 用户名
     * @param password 密码
     * @return 登录成功的用户信息
     */
    @PostMapping("/login")
    public ResponseEntity<ApiResponse<User>> login(@RequestParam String username, @RequestParam String password) {

            System.out.println("111111111111111111111111111111111111111111111111111111111100"+username+password);
            User loggedInUser = userService.login(username, password);
            if (loggedInUser != null){
                return ResponseEntity.ok(ApiResponse.success("登录成功", loggedInUser));
            }else {
                return ResponseEntity.ok(ApiResponse.success("登录失败", loggedInUser));
            }
    }
    
//    /**
//     * 根据ID获取用户信息
//     *
//     * @param userId 用户ID
//     * @return 用户信息
//     */
//    @GetMapping("/{userId}")
//    public ResponseEntity<ApiResponse<User>> getUserById(@PathVariable Integer userId) {
//        try {
//            User user = userService.getUserById(userId);
//            return ResponseEntity.ok(ApiResponse.success(user));
//        } catch (Exception e) {
//            logger.error("获取用户信息失败: {}", e.getMessage());
//            return ResponseEntity.badRequest().body(ApiResponse.error(e.getMessage()));
//        }
//    }
    
//    /**
//     * 根据用户名获取用户信息
//     *
//     * @param username 用户名
//     * @return 用户信息
//     */
//    @GetMapping("/username/{username}")
//    public ResponseEntity<ApiResponse<User>> getUserByUsername(@PathVariable String username) {
//        try {
//            User user = userService.getUserByUsername(username);
//            return ResponseEntity.ok(ApiResponse.success(user));
//        } catch (Exception e) {
//            logger.error("获取用户信息失败: {}", e.getMessage());
//            return ResponseEntity.badRequest().body(ApiResponse.error(e.getMessage()));
//        }
//    }
//
    /**
     * 获取所有用户列表
     * 
     * @return 用户列表
     */
    @GetMapping("/all")
    public ResponseEntity<ApiResponse<List<User>>> getAllUsers() {
       // List<User> users = userService.getAllUsers();
        List<User> users = userService.all();
        return ResponseEntity.ok(ApiResponse.success(users));
    }
    
//    /**
//     * 根据用户类型获取用户列表
//     *
//     * @param userType 用户类型（普通用户/商家）
//     * @return 指定类型的用户列表
//     */
//    @GetMapping("/type/{userType}")
//    public ResponseEntity<ApiResponse<List<User>>> getUsersByType(@PathVariable UserType userType) {
//        List<User> users = userService.getUsersByType(userType);
//        return ResponseEntity.ok(ApiResponse.success(users));
//    }
    
    /**
     * 更新用户信息
     * 
     * @param userId 用户ID
     * @param user 更新的用户信息
     * @return 更新后的用户信息
     */
    @PutMapping("/{userId}")
    public ResponseEntity<ApiResponse<User>> updateUser(@PathVariable Integer userId, @RequestBody User user) {
        try {
            user.setUserId(userId);
            User updatedUser = userService.updateUser(user);
            return ResponseEntity.ok(ApiResponse.success("用户信息更新成功", updatedUser));
        } catch (Exception e) {
            return ResponseEntity.badRequest().body(ApiResponse.error(e.getMessage()));
        }
    }
    
    /**
     * 删除用户
     * 
     * @param userId 用户ID
     * @return 操作结果
     */
    @DeleteMapping("/{userId}")
    public ResponseEntity<ApiResponse<Void>> deleteUser(@PathVariable Integer userId) {
        try {
            userService.deleteUser(userId);
            return ResponseEntity.ok(ApiResponse.success("用户删除成功", null));
        } catch (Exception e) {
            return ResponseEntity.badRequest().body(ApiResponse.error(e.getMessage()));
        }
    }
//
//    /**
//     * 检查用户名是否已存在
//     *
//     * @param username 用户名
//     * @return 是否存在
//     */
//    @GetMapping("/check-username/{username}")
//    public ResponseEntity<ApiResponse<Boolean>> checkUsernameExists(@PathVariable String username) {
//        boolean exists = userService.checkUsernameExists(username);
//        return ResponseEntity.ok(ApiResponse.success(exists));
//    }
//
//    /**
//     * 检查邮箱是否已被注册
//     *
//     * @param email 邮箱
//     * @return 是否已注册
//     */
//    @GetMapping("/check-email/{email}")
//    public ResponseEntity<ApiResponse<Boolean>> checkEmailExists(@PathVariable String email) {
//        boolean exists = userService.checkEmailExists(email);
//        return ResponseEntity.ok(ApiResponse.success(exists));
//    }
//
    /**
     * JSON示例接口
     * 演示如何使用JsonUtil将对象转换为JSON字符串
     * 
     * @return 用户对象的JSON字符串
     */
//    @GetMapping(value = "/json-example", produces = MediaType.APPLICATION_JSON_VALUE)
//    public String getJsonExample() {
//        User user = new User();
//        user.setUserId(1);
//        user.setUsername("example_user");
//        user.setEmail("example@example.com");
//        user.setUserType(UserType.user);
//
//        // 使用JsonUtil将对象转换为JSON字符串
//        return JsonUtil.toJson(user);
//    }
}